<?php

class administrador_Form_CadastrarCampeonato extends Zend_Form {

    protected $_timeMapper;
    protected $_todos_timeSeletor;
    protected $_times_selecionadosSeletor;

    public function __construct (Application_Model_TimeMapper $timeMapper) {
        $this->_timeMapper = $timeMapper;
        parent::__construct();
    }

    public function init() {
        $this->setMethod('post');

        $campeonato = $this->addElement('text', 'campeonato', array(
                'label'      => 'Nome do campeonato:',
                'required'   => true,
                'filters'    => array('StringTrim'),
                'validators' => array(
                        array('validator' => 'StringLength', 'options' => array(1, 23))
                )


        ));

        $campeonato = $this->addElement('text', 'ano_campeonato', array(
                'label'      => 'Ano do campeonato:',
                'required'   => true,
                'filters'    => array('StringTrim'),
                'validators' => array(
                        array('validator' => 'StringLength', 'options' => array(4,4)),
                        array('validator' => 'Digits'),
                )
        ));

        $this->_todos_timeSeletor = new Zend_Form_Element_Multiselect('times_selecionados',
                array('ignore' => 'true',
                      'size' => '10'));
        //$this->_todos_timeSeletor->setLabel('Times disponíveis');

        $this->_todos_timeSeletor->setDecorators(array(
            array ('ViewHelper'),
            array ('Errors'),
            array ('Description'),
            array ('Callback', array('callback' => array(get_class($this), 'tabelaLabel'), 'placement' => false))
        ));

        $listaDetimes = $this->_timeMapper->fetchAll();

        foreach ($listaDetimes as $time) {
            $nome = $time->getNome();
            //retorna o segundo argumento para o seletor visível ao usuário
            //e o primeiro argumento retorna para o controller.
            $this->_todos_timeSeletor->addMultiOption($nome, $nome);

        }
        $this->addElement($this->_todos_timeSeletor);
        

        $this->addDisplayGroup(
                array(
                'times_selecionados',
                ),
                'selecao_time',
                array (
                    'decorators' => array(
                        'FormElements',
                        //'Fieldset',
                        array ('Callback', array('callback' => array(get_class($this), 'tabelaLinha'), 'placement' => false)),
                        'DtDdWrapper',
                    )
                )
        );

        //botao de inserir campeonato
        $criar = $this->addElement('submit', 'inserir', array(
                //'ignore'   => true,
                'label'    => 'Inserir',
        ));

        //botao de inserir novo time

        $criar = $this->addElement('submit', 'novo_time', array(
                'label'    => 'Novo time',
        ));

        // alguma protecao contra flood.
        $this->addElement('hash', 'csrf', array(
                'ignore' => true,
        ));

    }

    public function isValid ($dados)
    {
//        if (array_key_exists('times_selecionados', $dados)) {
//            $this->_times_selecionadosSeletor->clearMultiOptions();
//            foreach($dados['times_selecionados'] as $time) {
//                $this->_times_selecionadosSeletor->addMultiOption(
//                        $time, $time);
//                $this->_todos_timeSeletor->removeMultiOption($time);
//            }
//        }

        $resultado = parent::isValid($dados);

        return $resultado;

    }

    public static function tabelaLabel ($content, $element, array $options) {
        $label = new Zend_Form_Decorator_Label();
        $label->setTag(null);
        $label->setElement($element);
        return '<td>'. $label->render($content) . '</td>';
    }

    public static function pulaLinha ($content, $element, array $options) {
        return '<br/>';
        //return '';
    }

    public static function tabelaLinha ($content, $element, array $options) {

        $fieldSet = new Zend_Form_Decorator_Fieldset();
        $fieldSet->setElement($element);

        return $fieldSet->render('<table><tr>' . $content) . '</tr></table>';
    }

}

